home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d17 / mpmpr2.arc / TEST.PAS < prev   
Pascal/Delphi Source File  |  1988-01-25  |  45KB  |  1,126 lines

  1. program test;
  2.  
  3. type
  4.    sbyte = set of byte;
  5.    prt_name = string[35];
  6.    prntr = record
  7.              point:integer;
  8.              pname: prt_name;
  9.            end;
  10. const
  11.    copyright = 'COPYRIGHT (C) 1985, 1986, 1987, MPM ENTERPRISES, INC.    ';
  12.    address   = '                                306 Park Avenue          ';
  13.    city_state= '                                Wilmette, Illinois  60091';
  14.    esc = #27;
  15.    nul = #0;
  16.    one = #1;
  17.    PICA = 80;        {characters per line used for various modes}
  18.    EXPANDED = 40;
  19.    ELITE = 96;
  20.    EX_ELITE = 48;
  21.    COMPRESSED = 137;
  22.    EX_COMPRESSED = 68;
  23.    COM_ELITE = 158;
  24.    MODE15 = 116;
  25.    EX_MODE15 = 58;
  26.    NPRINTERS = 37;
  27.    NPRINT1 = 36;
  28.  
  29.  
  30. const
  31.    stest : array[0..28] of sbyte = (
  32.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  33.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  34.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  35.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  36.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  37.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  38.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  39.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  40.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  41.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  42.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  43.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  44.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  45.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  46.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  47.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  48.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  49.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  50.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  51.                    [8,9,10,11,12,13,14,15,17,18,19,20,24],
  52.                    [8,9,10,11,12,13,14,15,17,18,19,20],
  53.                    [8,9,10,11,12,13,14,15,18,20],
  54.                    [8,9,10,11,12,13,14,15,17,18,19,20],
  55.                    [8,9,10,11,12,13,14,15,18,20],
  56.                    [8,9,10,11,12,13,14,15,18,20,24],
  57.                    [8,9,10,11,12,13,14,15,18,20,24],
  58.                    [8,9,10,11,12,13,14,15,18,20,24],
  59.                    [8,9,10,11,12,13,14,15,18,20,24],
  60.                    [8,9,10,11,12,13,14,15,18,20,24] );
  61.  
  62.  
  63.    etest : array [0..28] of sbyte = (
  64.                     [33,35,37,38,42,45,47,48,49,50,51,  {0}
  65.                      52,53,54,55,56,57,58,60,61,62,63,
  66.                      64,65,66,67,68,69,70,71,72,73,74,
  67.                      75,76,77,78,79,80,81,82,83,84,85,
  68.                      87,89,90,94,98,105,106,108,112,115],
  69.                     [33,35,37,38,42,45,47,48,49,50,51,  {1}
  70.                      52,53,54,55,56,57,58,60,61,62,63,
  71.                      64,65,66,67,68,69,70,71,72,73,74,
  72.                      75,76,77,78,79,80,81,82,83,84,85,
  73.                      87,89,90,94,98,108,112,115],
  74.                     [33,35,37,38,42,45,47,48,49,50,51,  {2}
  75.                      52,53,54,55,56,57,58,60,61,62,63,
  76.                      64,65,66,67,68,69,70,71,72,73,74,
  77.                      75,76,77,78,79,80,81,82,83,84,85,
  78.                      86,87,89,90,92,94,98,105,106,107,108,
  79.                      112,115,120],
  80.                     [33,35,37,38,42,45,47,48,49,50,51,  {3}
  81.                      52,53,54,55,56,57,58,60,61,62,63,
  82.                      64,65,66,67,68,69,70,71,72,73,74,
  83.                      75,76,77,78,79,80,81,82,83,84,85,
  84.                      86,87,89,90,92,94,98,107,108,112,115,
  85.                      120],
  86.                     [25,33,35,37,38,42,45,47,48,49,50,  {4}
  87.                      51,52,53,54,55,56,57,58,60,61,62,
  88.                      63,64,65,66,67,68,69,70,71,72,73,
  89.                      74,75,76,77,78,79,80,81,82,83,84,
  90.                      85,87,89,90,94,98,105,106,108,112,115],
  91.                     [25,33,35,37,38,42,45,47,48,49,50,  {5}
  92.                      51,52,53,54,55,56,57,58,60,61,62,
  93.                      63,64,65,66,67,68,69,70,71,72,73,
  94.                      74,75,76,77,78,79,80,81,82,83,84,
  95.                      85,87,89,90,94,98,108,112,115],
  96.                     [25,33,35,37,38,42,45,47,48,49,50,  {6}
  97.                      51,52,53,54,55,56,57,58,60,61,62,
  98.                      63,64,65,66,67,68,69,70,71,72,73,
  99.                      74,75,76,77,78,79,80,81,82,83,84,
  100.                      85,86,87,89,90,92,94,98,105,106,107,
  101.                      108,112,115,120],
  102.                     [25,33,35,37,38,42,45,47,48,49,50,  {7}
  103.                      51,52,53,54,55,56,57,58,60,61,62,
  104.                      63,64,65,66,67,68,69,70,71,72,73,
  105.                      74,75,76,77,78,79,80,81,82,83,84,
  106.                      85,86,87,89,90,92,94,98,107,108,112,
  107.                      115,120],
  108.                     [14,15,18,20,25,33,35,37,38,42,45,  {8}
  109.                      47,48,49,50,51,52,53,54,55,56,57,
  110.                      58,60,61,62,63,64,65,66,67,68,69,
  111.                      70,71,72,73,74,75,76,77,78,79,80,
  112.                      81,82,83,84,85,87,89,90,94,97,98,
  113.                      105,106,107,108,112,115,120],
  114.                     [14,15,18,20,25,33,35,37,38,42,45,  {9}
  115.                      47,48,49,50,51,52,53,54,55,56,57,
  116.                      58,60,61,62,63,64,65,66,67,68,69,
  117.                      70,71,72,73,74,75,76,77,78,79,80,
  118.                      81,82,83,84,85,87,89,90,94,97,98,
  119.                      107,108,112,115,120],
  120.                     [14,15,18,20,25,32,33,35,36,37,38,  {10}
  121.                      42,45,47,48,49,50,51,52,53,54,55,
  122.                      56,57,58,60,61,62,63,64,65,66,67,
  123.                      68,69,70,71,72,73,74,75,76,77,78,
  124.                      79,80,81,82,83,84,85,87,89,90,92,
  125.                      94,97,98,107,108,112,115,116,119,120],
  126.                     [14,15,18,20,33,35,37,38,42,45,47,  {11}
  127.                      48,49,50,51,52,53,54,55,56,57,58,
  128.                      60,61,62,63,64,65,66,67,68,69,70,
  129.                      71,72,73,74,75,76,77,78,79,80,81,
  130.                      82,83,84,85,87,89,90,94,98,105,106,
  131.                      108,112,114,115],
  132.                     [14,15,18,20,33,35,37,38,42,45,47,  {12}
  133.                      48,49,50,51,52,53,54,55,56,57,58,
  134.                      60,61,62,63,64,65,66,67,68,69,70,
  135.                      71,72,73,74,75,76,77,78,79,80,81,
  136.                      82,83,84,85,86,87,89,90,92,94,98,
  137.                      105,106,107,108,112,114,115,120],
  138.                     [14,15,18,20,25,32,33,35,36,37,38,  {13}
  139.                      42,45,47,48,49,50,51,52,53,54,55,
  140.                      56,57,58,60,61,62,63,64,65,66,67,
  141.                      68,69,70,71,72,73,74,75,76,77,78,
  142.                      79,80,81,82,83,84,85,87,89,90,92,
  143.                      94,97,98,105,106,107,108,112,114,115,116,
  144.                      120],
  145.                     [14,15,18,20,25,32,33,35,36,37,38,  {14}
  146.                      42,45,47,48,50,51,52,53,56,57,58,
  147.                      60,61,62,63,64,65,66,67,68,69,70,
  148.                      71,72,74,75,76,77,78,79,80,81,82,
  149.                      83,84,85,86,87,89,90,92,98,107,108,
  150.                      112,115,120],
  151.                     [14,15,18,20,25,32,33,35,36,37,38,  {15}
  152.                      42,45,47,48,50,51,52,53,56,57,58,
  153.                      60,61,62,63,64,65,66,67,68,69,70,
  154.                      71,72,74,76,77,78,79,80,81,82,83,
  155.                      84,85,86,87,89,90,92,97,98,107,108,
  156.                      112,115,120],
  157.                     [14,15,18,20,25,32,33,35,36,37,38,  {16}
  158.                      42,45,47,48,50,51,52,53,54,55,58,
  159.                      60,61,62,63,64,65,66,67,68,69,70,
  160.                      71,72,74,75,76,77,78,79,80,81,82,
  161.                      83,84,85,87,89,90,92,97,98,101,102,
  162.                      103,107,108,112,115,116,120],
  163.                     [14,15,18,20,25,32,33,35,36,37,38,  {17}
  164.                      42,45,47,48,50,51,52,53,54,55,58,
  165.                      60,61,62,63,64,65,66,67,68,69,70,
  166.                      71,72,74,75,76,77,78,79,80,81,82,
  167.                      83,84,85,87,89,90,92,97,98,103,107,
  168.                      108,112,114,115,116,119,120],
  169.                     [25,33,37,38,42,45,47,48,49,50,51,  {18}
  170.                      52,53,56,57,58,60,63,64,65,66,67,
  171.                      68,69,70,71,72,74,75,76,77,78,79,
  172.                      80,81,82,83,84,85,87,89,90,94,97,
  173.                      98,101,102,108,109,115],
  174.                     [14,15,18,20,25,33,37,38,42,45,47,  {19}
  175.                      48,49,50,51,52,53,54,55,56,57,58,
  176.                      60,63,64,65,66,67,68,69,70,71,72,
  177.                      74,75,76,77,78,79,80,81,82,83,84,
  178.                      85,87,89,90,94,97,98,101,102,108,109,
  179.                      115,116],
  180.                     [14,15,18,20,48,49,50,51,52,53,56,  {20}
  181.                      57,60,61,62,64,65,66,68,69,70,71,
  182.                      72,74,75,76,80,83,84],
  183.                     [35,45,48,49,50,51,52,53,56,57,60,  {21}
  184.                      61,62,64,65,67,68,69,70,71,72,74,
  185.                      75,76,78,79,81,83,84,85,87],
  186.                     [14,15,18,20,48,50,56,57,65,67,68,  {22}
  187.                      69,70,71,72,75,76,78,79,81,82],
  188.                     [14,15,18,20,42,45,48,49,50,51,52,  {23}
  189.                      53,56,57,60,64,65,67,68,69,70,71,
  190.                      72,74,75,76,77,78,79,80,81,82,83,
  191.                      84,85,87,89,90,101,102,108,109,115],
  192.                     [14,15,18,20,42,45,48,49,50,51,52,  {24}
  193.                      53,56,57,60,64,65,67,68,69,70,71,
  194.                      72,74,75,76,77,78,79,80,81,82,83,
  195.                      84,85,87,89,90,94,108,109,115],
  196.                     [14,15,18,20,25,33,42,45,47,48,49,  {25}
  197.                      50,51,52,53,56,57,60,64,65,66,67,
  198.                      68,69,70,71,72,74,75,76,77,78,79,
  199.                      80,81,82,83,84,85,87,89,90,94,98,
  200.                      101,102,108,109,115],
  201.                     [14,15,18,20,25,33,42,45,47,48,49,  {26}
  202.                      50,51,52,53,56,57,60,64,65,66,67,
  203.                      68,69,70,71,72,74,75,76,77,78,79,
  204.                      80,81,82,83,84,85,87,89,90,94,98,
  205.                      108,109,115],
  206.                     [14,15,18,20,25,33,38,42,45,47,48,  {27}
  207.                      49,50,51,52,53,56,57,58,60,64,65,
  208.                      66,67,68,69,70,71,72,74,75,76,77,
  209.                      78,79,80,81,82,83,84,85,86,87,89,
  210.                      90,94,98,101,102,107,108,109,112,115,120],
  211.                     [14,15,18,20,25,33,38,42,45,47,48,  {28}
  212.                      49,50,51,52,53,56,57,58,60,64,65,
  213.                      66,67,68,69,70,71,72,74,75,76,77,
  214.                      78,79,80,81,82,83,84,85,86,87,89,
  215.                      90,94,98,107,108,109,112,115,120] );
  216.  
  217. printers: array[0..NPRINT1] of prntr = (
  218.         (point:0;  pname: 'FX-80'),
  219.         (point:1;  pname: 'FX-100'),
  220.         (point:2;  pname: 'FX-80 with Letter Quality ROM'),
  221.         (point:3;  pname: 'FX-100 with Letter Quality ROM'),
  222.         (point:4;  pname: 'FX-80+'),
  223.         (point:5;  pname: 'FX-100+'),
  224.         (point:6;  pname: 'FX-80+ with Letter Quality ROM'),
  225.         (point:7;  pname: 'FX-100+ with Letter Quality ROM'),
  226.         (point:8;  pname: 'FX-85'),
  227.         (point:9;  pname: 'FX-185'),
  228.         (point:9;  pname: 'FX-285'),
  229.         (point:10; pname: 'FX-86e'),
  230.         (point:10; pname: 'FX-286e'),
  231.         (point:11; pname: 'JX-80'),
  232.         (point:12; pname: 'JX-80 with Letter Quality ROM'),
  233.         (point:13; pname: 'EX-800'),
  234.         (point:13; pname: 'EX-1000'),
  235.         (point:14; pname: 'LQ-1500 version 1.8'),
  236.         (point:15; pname: 'LQ-1500 version 2.0'),
  237.         (point:16; pname: 'LQ-800'),
  238.         (point:16; pname: 'LQ-1000'),
  239.         (point:17; pname: 'LQ-2500'),
  240.         (point:18; pname: 'LX-80'),
  241.         (point:19; pname: 'LX-86'),
  242.         (point:20; pname: 'MX-80 with GRAFTRAX (old GRAFTRAX)'),
  243.         (point:21; pname: 'MX-80 with GRAFTRAX+ (Type III)'),
  244.         (point:22; pname: 'MX-100 Type II (original MX-100)'),
  245.         (point:21; pname: 'MX-100 with GRAFTRAX+ (Type III)'),
  246.         (point:23; pname: 'RX-80'),
  247.         (point:23; pname: 'RX-80 F/T'),
  248.         (point:24; pname: 'RX-100'),
  249.         (point:25; pname: 'RX-80+'),
  250.         (point:25; pname: 'RX-80 F/T+'),
  251.         (point:26; pname: 'RX-100+'),
  252.         (point:27; pname: 'RX-80+ with Letter Quality ROM'),
  253.         (point:27; pname: 'RX-80 F/T+ with Letter Quality ROM'),
  254.         (point:28; pname: 'RX-100+ with Letter Quality ROM') );
  255.  
  256.  
  257. type
  258.    regs = record
  259.             case integer of
  260.                1: (ax,bx,cx,dx,bp,si,di,ds,es,flags: integer);
  261.                2: (al,ah,bl,bh,cl,ch,dl,dh         : byte);
  262.             end;
  263. var
  264.    i,j,k,l,margin:integer;
  265.    this_print:integer;
  266.    ii,jj,tt  : char;
  267.    test_escape,test_control: set of byte;
  268.  
  269. function MPM_print_installed: boolean;  {logical function, returns FALSE}
  270.                                         { if the printer contol program }
  271.                                         { is NOT installed; true if it is}
  272.                                         {We test this because this program}
  273.                                         { will cause an Epson printer to do}
  274.                                         { some squirrely things if MPM-Print}
  275.                                         { is not memory-resident.}
  276. var
  277.    tregs:regs;
  278. begin
  279.    MPM_print_installed:=FALSE;
  280.    with tregs do
  281.    begin
  282.       ax:=$CAFE;          {hexadecimal value to test if MPM-Print is installed}
  283.       bx:=1;              {make sure MPM-Print is turned ON}
  284.       intr($17,tregs);    {call the printer interrupt}
  285.       if (ax = $FEED) then
  286.       begin
  287.          MPM_print_installed:=TRUE;
  288.          this_print := dx; {DX register holds the number of the printer}
  289.                            {according to the list above}
  290.       end;
  291.    end;
  292. end;
  293.  
  294. procedure print_chars;   {prints the 240 characters that can be printed}
  295. var i,j:integer;         {by MPM-print}
  296.  
  297. begin
  298.    j:=0;
  299.    for i:=1 to 254 do
  300.    begin
  301.       if (i in [1..6,16,21..23,25,26,28..254]) then
  302.       begin
  303.          write(lst,char(i));
  304.          j:=succ(j);                  {print only the number of allowed}
  305.          if (j>=margin) then          {characters per line}
  306.          begin
  307.             writeln(lst);
  308.             j:=0;
  309.          end;
  310.       end;
  311.    end;
  312.    writeln(lst);
  313.    writeln(lst);
  314. end;
  315.  
  316. procedure print_design;
  317. begin
  318.    writeln(lst,'  ╔═╗╔═╗╔═╗▄▄╔═╗╔═╗╔═╗');
  319.    writeln(lst,'  ╚═║╚╗║╚╗║▀▀║╔╝║╔╝║═╝');
  320.    writeln(lst,'    ╚═╝╚═╝╚══╝╚═╝╚═╝');
  321.    writeln(lst);
  322. end;
  323.  
  324. procedure do_bar(tt:char);
  325. var j:integer;
  326. begin
  327.    write(lst,'┌',esc,tt,char(120),nul);
  328.    for j:=1 to 60 do write(lst,char(127),char(42));
  329.    writeln(lst,'┐');        
  330.    write(lst,'├',esc,tt,char(120),nul);
  331.    for j:=1 to 60 do write(lst,char(127),char(42));
  332.    writeln(lst,'┤');
  333.    write(lst,'└',esc,tt,char(120),nul);
  334.    for j:=1 to 60 do write(lst,char(127),char(42));
  335.    writeln(lst,'┘');
  336.    writeln(lst);
  337.    writeln(lst);
  338. end;
  339.  
  340.  
  341. procedure do_control_codes(i:integer);   {test the single-byte control codes}
  342. begin
  343.    gotoxy(1,15);
  344.    clreol;
  345.    write('testing control code ',i);
  346.  
  347.    case i of
  348.      7: writeln(lst,'BELL (chr$(7))',char(7));
  349.      8: begin
  350.            write(lst,'BACKSPACE (chr$(8))');
  351.            for j:=1 to 19 do write(lst,char(8));
  352.            writeln(lst,'/\/\/\/\/');
  353.         end;
  354.      9: begin
  355.            for j:=1 to 5 do write(lst,'TAB (chr$(9))',char(9));
  356.            writeln(lst);
  357.         end;
  358.      10: for j:=1 to 5 do write(lst,'LINE FEED (chr$(10))',char(10));
  359.      11: for j:=1 to 5 do write(lst,'VERTICAL TAB (chr$(11))',char(11));
  360.      13: begin
  361.            for j:=1 to 5 do write(lst,'CARRIAGE RETURN (chr$(13))',char(13));
  362.            writeln(lst);
  363.          end;
  364.      14: begin
  365.             writeln(lst,char(14),'ONE LINE EXPANDED MODE ON (chr$(14))');
  366.             writeln(lst);
  367.             margin:=EXPANDED;
  368.             print_chars;
  369.             writeln(lst,'ONE LINE EXPANDED MODE OFF (chr$(20))',char(20));
  370.             margin:=PICA;
  371.          end;
  372.      15: begin
  373.             writeln(lst,'SHIFT IN (COMPRESSED MODE ON) (chr$(15))',char(15));
  374.             writeln(lst);
  375.             margin:=COMPRESSED;
  376.             print_chars;
  377.             print_design;
  378.             writeln(lst,'COMPRESSED MODE OFF',char(18),'(chr$(18))');
  379.             margin:=PICA;
  380.          end;
  381.    end;  {case statement}
  382.  
  383.    if (i in [7,8,9,10,11,13,14,15]) then    {filter inadvertent control codes}
  384.    begin
  385.       writeln(lst);
  386.       writeln(lst);
  387.    end;
  388.  
  389. end;   {do_control_codes}
  390.  
  391. procedure clear_escape_codes(e_code:integer);    {reset the printer from}
  392. begin                                            {whatever mode was set}
  393.    tt:=char(e_code);                             {by do_escape_codes}
  394.  
  395.    case e_code of
  396.       14: writeln(lst,char(20));
  397.       15: begin
  398.              writeln(lst,'COMPRESSED MODE OFF ',char(18),'(CHR$(18))');
  399.           end;
  400.       33: begin
  401.              writeln(lst,'MASTER PRINT MODE SELECT');
  402.              writeln(lst,'(choosing Pica, (ESC 33 0)',
  403.                            esc,tt,nul);
  404.           end;
  405.       38: writeln(lst,'SELECTING the ROM character set (ESC 37 0 0)',
  406.                   esc,char(37),nul,nul);
  407.       45: writeln(lst,esc,tt,nul,'NON-UNDERLINE MODE (ESC 45 0)');
  408.       48: writeln(lst,'RESET LINE SPACING TO DEFAULT 1/6 INCH ',
  409.                       ' (ESC 50)',esc,char(50));
  410.       49: writeln(lst,'RESET LINE SPACING TO DEFAULT 1/6 INCH ',
  411.                       ' (ESC 50)',esc,char(50));
  412.       51: writeln(lst,'RESET LINE SPACING TO DEFAULT 1/6 INCH ',
  413.                       ' (ESC 50)',esc,char(50));
  414.       52: writeln(lst,esc,char(53),'TURN THE ITALIC CHARACTER SET OFF',
  415.                                    ' (ESC 53)');
  416.       63: begin
  417.              writeln(lst,'RESETTING THE GRAPHICS MODE (ESC 63 K 0)',
  418.                       esc,char(63),'K',char(0) );
  419.              writeln(lst,'printing a graphics bar',
  420.                      ' (ESC 75 120 0 +120 character bytes)');
  421.              do_bar(char(75));
  422.           end;
  423.       65: writeln(lst,'RESET LINE SPACING TO DEFAULT 1/6 INCH ',
  424.                       ' (ESC 50)',esc,char(50));
  425.       69: writeln(lst,'TURN EMPHASIZED MODE OFF (ESC 70)',esc,char(70));
  426.       71: writeln(lst,'TURN DOUBLE STRIKE MODE OFF (ESC 72)',esc,char(72));
  427.       77: writeln(lst,'TURN ELITE MODE OFF (ESC 80)',esc,char(80));
  428.       81: begin
  429.              writeln(lst,esc,tt,char(80),
  430.                   'RESET THE COLUMN WIDTH TO 80 (ESC 81 80)');
  431.           end;
  432.       82: begin
  433.              writeln(lst,'RESET THE INTERNATIONAL CHARACTER SET');
  434.              writeln(lst,'to the USA set (ESC 82 0)',esc,tt,nul);
  435.              writeln(lst);
  436.              print_chars;
  437.           end;
  438.       85: writeln(lst,'TURN UNIDIRECTIONAL MODE OFF (ESC 85 0)',
  439.                   esc,tt,nul);
  440.       87: writeln(lst,'TURN EXPANDED MODE OFF (ESC 87 0)',
  441.                   esc,tt,nul);
  442.      103: writeln(lst,'TURN 15 CPI MODE OFF (ESC 80)',esc,char(80));
  443.      108: begin
  444.              writeln(lst,'RESET LEFT MARGIN TO 0 CHARACTERS (ESC 108 0)');
  445.              writeln(lst,esc,tt,nul);
  446.              writeln(lst);
  447.           end;
  448.      112: writeln(lst,'TURN PROPORTIONAL MODE OFF (ESC 112 0)',
  449.                   esc,tt,nul);
  450.      115: writeln(lst,'HALF-SPEED MODE OFF (ESC 115 0)',
  451.                   esc,tt,nul);
  452.      120: writeln(lst,'RESETTING TO DRAFT MODE (ESC 120 0)',esc,tt,char(0));
  453.    end;   {case statement}
  454.  
  455.    if (e_code in [15,33,38,45,48,49,51,52,65,69,71,77,81,85,87,97,103,108,112,115]) then
  456.    begin                       {filter inadvertent escape codes}
  457.       writeln(lst);
  458.       writeln(lst);
  459.    end;
  460.  
  461.    margin:=PICA;      {all resets return the printer to the normal, PICA mode}
  462. end;   {clear_escape_codes}
  463.  
  464. procedure do_escape_codes(e_code:integer);
  465. begin
  466.    gotoxy(1,15);
  467.    clreol;
  468.    write('testing escape code ',e_code);
  469.    tt:=char(e_code);
  470.  
  471.    case e_code of
  472.       14: begin
  473.              writeln(lst,esc,tt,'ONE LINE EXPANDED MODE ON (ESC 14)');
  474.              margin:=EXPANDED;
  475.           end;
  476.       15: begin
  477.              writeln(lst,'SHIFT IN (COMPRESSED MODE ON) (ESC 15)',esc,tt);
  478.              margin:=COMPRESSED;
  479.           end;
  480.       33: begin
  481.              writeln(lst,'MASTER PRINT MODE SELECT');
  482.              writeln(lst,'(choosing Expanded Compressed, (ESC 33 36)',
  483.                            esc,tt,char(36));
  484.              margin:=EX_COMPRESSED;
  485.           end;
  486.       36: begin
  487.              writeln(lst,'ABSOLUTE HORIZONTAL TAB');
  488.              writeln(lst,'(tabbing to 2 inches (ESC 36 n1 n2), where space= (n1+256*n2)/60)');
  489.              write(lst,esc,tt,chr(120),chr(0));
  490.              margin:=EX_ELITE;
  491.           end;
  492.       38: begin
  493.              writeln(lst,'USING THE DOWNLOAD CHARACTER SET');
  494.              writeln(lst,'*** NOTE ***');
  495.              writeln(lst,'printer switches must be set according to ',
  496.                          'manual instructions for the download set to work');
  497.              writeln(lst);
  498.              writeln(lst,'COPYING CHARACTER SET FROM ROM TO THE DOWNLOAD RAM',
  499.                          ' (ESC 58 0 0 0)',esc,char(58),nul,nul,nul);
  500.              writeln(lst);
  501.  
  502.              if (this_print in [17..21]) then
  503.               begin
  504.                 writeln(lst,'REPLACING THE "A" WITH A MODIFIED CHARACTER',
  505.                             ' (ESC 38 0 65 65 1 9 2 +27 character bytes) ',
  506.                             esc,char(38),nul,char(65),char(65),
  507.                             char(1),char(9),char(2),
  508.                             char(1),char(0),char(0),
  509.                             char(2),char(0),char(0),
  510.                             char(4),char(0),char(0),
  511.                             char(8),char(0),char(0),
  512.                             char(23),char(255),char(240),
  513.                             char(8),char(0),char(0),
  514.                             char(4),char(0),char(0),
  515.                             char(2),char(0),char(0),
  516.                             char(1),char(0),char(0));
  517.               end
  518.              else
  519.               begin
  520.                 writeln(lst,'REPLACING THE "A" WITH A MODIFIED CHARACTER',
  521.                             ' (ESC 38 0 65 65 +12 character bytes) ',
  522.                             esc,char(38),nul,char(65),char(65),char(139),
  523.                             char(7),char(8),char(16),char(36),char(64),
  524.                             char(36),char(16),char(8),char(7),nul,nul);
  525.               end;
  526.              writeln(lst);
  527.              writeln(lst,'SELECTING the download character set (ESC 37 1)',
  528.                      esc,char(37),one,nul);
  529.           end;
  530.       42: begin
  531.              writeln(lst,'MASTER GRAPHICS MODE SELECTION');
  532.              writeln(lst,'printing a graphics bar using quad density',
  533.                      ' (ESC 42 3 120 0 +120 character bytes)');
  534.              ii := char(3);
  535.              write(lst,'┌',esc,tt,ii,char(120),nul);
  536.              for j:=1 to 60 do write(lst,char(127),char(42));
  537.              writeln(lst,'┐');        
  538.              write(lst,'├',esc,tt,ii,char(120),nul);
  539.              for j:=1 to 60 do write(lst,char(127),char(42));
  540.              writeln(lst,'┤');
  541.              write(lst,'└',esc,tt,ii,char(120),nul);
  542.              for j:=1 to 60 do write(lst,char(127),char(42));
  543.              writeln(lst,'┘');
  544.              writeln(lst);
  545.              writeln(lst);
  546.           end;
  547.       45: writeln(lst,'UNDERLINE MODE (ESC 45 1)',esc,tt,one);
  548.       48: writeln(lst,'SET LINE SPACING TO 1/8 INCH (ESC 48)',
  549.                   esc,tt);
  550.       49: writeln(lst,'SET LINE SPACING TO 7/72 INCH (ESC 49)',
  551.                   esc,tt);
  552.       51: begin
  553.              if (this_print in [17..21]) then
  554.                 writeln(lst,'SET LINE SPACING TO N/180 INCH')
  555.              else
  556.                 writeln(lst,'SET LINE SPACING TO N/216 INCH');
  557.              writeln(lst,'using n=63 (ESC 51 63)',esc,tt,char(63));
  558.           end;
  559.       52: writeln(lst,'TURN THE ITALIC CHARACTER SET ON (ESC 52)',
  560.                   esc,tt);
  561.       60: writeln(lst,'TURN ON ONE-LINE UNIDIRECTIONAL MODE (ESC 60)',
  562.                   esc,tt);
  563.       63: begin
  564.              writeln(lst,'REASSIGNING GRAPHICS MODE (reassigning quad density',
  565.                          ' to single density');
  566.              writeln(lst,'(ESC 63 K 3)',esc,tt,'K',char(3));
  567.              writeln(lst,'printing a graphics bar',
  568.                      ' (ESC 75 120 0 +120 character bytes)');
  569.              do_bar(char(75));
  570.           end;
  571.       65: begin
  572.              if (this_print in [17..21]) then
  573.               begin
  574.                 writeln(lst,'SET LINE SPACING TO n/60 INCH');
  575.                 writeln(lst,'using 30 dots (ESC 65 30)',esc,tt,char(30));
  576.               end
  577.              else
  578.               begin
  579.                 writeln(lst,'SET LINE SPACING TO n/72 INCH (n DOTS)');
  580.                 writeln(lst,'using 36 dots (ESC 65 36)',esc,tt,char(36));
  581.               end;
  582.           end;
  583.       66: begin
  584.              writeln(lst,'SET UP TO 16 VERTICAL TABS');
  585.              writeln(lst,'using 4 tab settings at 5,11,18, and 26 ',
  586.                      '(ESC 66 5 11 18 26 0)',esc,tt,char(5),char(11),
  587.                      char(18),char(26),nul);
  588.              writeln(lst);
  589.              writeln(lst,'SETTING TOP OF FORM');
  590.              write(lst,char(12));
  591.              do_control_codes(11);
  592.           end;
  593.       67: begin
  594.              write(lst,'GO TO TOP OF FORM',char(12),esc,tt,char(30));
  595.              writeln(lst,'SET FORM LENGTH IN LINES');
  596.              writeln(lst,'set to 30 lines (ESC 67 30)');
  597.              writeln(lst,'go to "top of form"');
  598.              write(lst,char(12),esc,tt,nul,char(6));
  599.              writeln(lst,'SET FORM LENGTH IN INCHES');
  600.              writeln(lst,'set to 6 inches (ESC 67 6)');
  601.              writeln(lst);
  602.              write(lst,'go to "top of form" and reset form length to 66 lines',
  603.                    char(12),esc,tt,char(66));
  604.           end;
  605.       68: begin
  606.              writeln(lst,'SET UP TO 32 HORIZONTAL TABS');
  607.              writeln(lst,'using 6 tab settings at 18,34,48,60, and 70 ',
  608.                      '(ESC 68 18 34 48 60 70 0)',esc,tt,char(18),char(34),
  609.                      char(48),char(60),char(70),nul);
  610.              writeln(lst);
  611.              do_control_codes(9);
  612.              writeln(lst);
  613.           end;
  614.       69: writeln(lst,'TURN EMPHASIZED ON MODE (ESC 69)',esc,tt);
  615.       71: writeln(lst,'TURN DOUBLE STRIKE MODE ON (ESC 71)',esc,tt);
  616.       74: begin
  617.              if (this_print in [17..21]) then
  618.               begin
  619.                 writeln(lst,'FORCE AN IMMEDIATE LINE FEED OF n/180 INCHES');
  620.                 write(lst,'use n=153 (ESC 74 153)',esc,tt,char(153));
  621.                 write(lst,'153/180 inch linefeed complete');
  622.               end
  623.              else
  624.               begin
  625.                 writeln(lst,'FORCE AN IMMEDIATE LINE FEED OF n/216 INCHES');
  626.                 write(lst,'use n=188 (ESC 74 188)',esc,tt,char(188));
  627.                 write(lst,'188/216 inch linefeed complete');
  628.               end;
  629.              writeln(lst);
  630.           end;
  631.       75: begin
  632.              writeln(lst,'NORMAL GRAPHICS MODE');
  633.              writeln(lst,'printing a graphics bar',
  634.                      ' (ESC 75 120 0 +120 character bytes)');
  635.              do_bar(tt);
  636.           end;
  637.       76: begin
  638.              writeln(lst,'LOW-SPEED DOUBLE-DENSITY GRAPHIC MODE');
  639.              writeln(lst,'printing a graphics bar',
  640.                      ' (ESC 76 120 0 +120 character bytes)');
  641.              do_bar(tt);
  642.           end;
  643.       77: begin
  644.              writeln(lst,'TURN ELITE MODE ON (ESC 77)',esc,tt);
  645.              margin:=ELITE;
  646.           end;
  647.       81: begin
  648.              writeln(lst,'SET THE COLUMN WIDTH  (RIGHT MARGIN)');
  649.              writeln(lst,esc,tt,char(60),'set to 60 columns (ESC 81 60)');
  650.              writeln(lst,'(Notice that lines of "special" characters that MPM-print uses are truncated');
  651.              writeln(lst,'rather than wrapped at the right margin)');
  652.              {don't reset the margin, to see how graphics behaves}
  653.           end;
  654.       82: begin
  655.              writeln(lst,'SELECT AN INTERNATIONAL CHARACTER SET');
  656.              writeln(lst,'use the Swedish set (ESC 82 5)',esc,tt,char(5));
  657.           end;
  658.       83: begin
  659.              writeln(lst,'TURN SCRIPT MODE ON (TO SUPER- OR SUBSCRIPT)');
  660.              writeln(lst);
  661.              write(lst,esc,tt,nul,'SUPERSCRIPT (ESC 83 0)',esc,char(84),
  662.                   ' NORMAL ',esc,tt,one,'SUBSCRIPT (ESC 83 1)',
  663.                   esc,char(84));
  664.              writeln(lst);
  665.              writeln(lst);
  666.           end;
  667.       85: writeln(lst,'TURN UNIDIRECTIONAL MODE ON (ESC 85 1)',
  668.                   esc,tt,one);
  669.       86: begin
  670.              writeln(lst,'REPEAT DATA 5 TIMES (ESC 86 5 data ESC 86 0)');
  671.              write(lst,esc,tt,char(5));
  672.              writeln(lst,'one two three four five');
  673.              write(lst,esc,tt,char(0));
  674.           end;
  675.       87: begin
  676.              writeln(lst,'TURN EXPANDED MODE ON (ESC 87 1)',esc,tt,one);
  677.              margin:=EXPANDED;
  678.           end;
  679.       89: begin
  680.              writeln(lst,'HIGH-SPEED DOUBLE-DENSITY GRAPHICS');
  681.              writeln(lst,'printing a graphics bar',
  682.                      ' (ESC 89 120 0 +120 character bytes)');
  683.              do_bar(tt);
  684.           end;
  685.       90: begin
  686.              writeln(lst,'QUADRUPLE DENSITY GRAPHICS MODE');
  687.              writeln(lst,'printing a graphics bar',
  688.                      ' (ESC 90 120 0 +120 character bytes)');
  689.              do_bar(tt);
  690.           end;
  691.       92: begin
  692.              writeln(lst,'MOVE PRINT HEAD 1.5 INCHES (ESC 92 n1 n2), where position = (n1+256*n2)/120)');
  693.              write(lst,esc,tt,chr(180),chr(0));
  694.              margin:=EXPANDED;
  695.           end;
  696.       94: begin
  697.              writeln(lst,'9-PIN GRAPHICS MODE');
  698.              writeln(lst,'printing a single density graphics bar',
  699.                      ' (ESC 94 0 120 0 +120 character bytes)');
  700.              write(lst,esc,tt,nul,char(120),nul);
  701.              for j:=1 to 60 do write(lst,char(127),char(255),
  702.                                      char(42),char(255));
  703.              writeln(lst);
  704.              writeln(lst);
  705.           end;
  706.       97: begin
  707.              writeln(lst,'JUSTIFICATION ON (ESC 97 n)');
  708.              writeln(lst,'     where n:');
  709.              writeln(lst,'             0 = left justified (normal text)');
  710.              writeln(lst,'             1 = centered');
  711.              writeln(lst,'             2 = right justified');
  712.              writeln(lst,'             3 = right and left justified');
  713.              write(lst);
  714.              writeln(lst,esc,tt,char(1),'One - centered');
  715.              writeln(lst,esc,tt,char(2),'Two - right justified');
  716.              writeln(lst,esc,tt,char(0),'Zero - left justified');
  717.           end;
  718.       98: begin
  719.              writeln(lst,'SET VERTICAL TAB FOR CHANNEL n');
  720.              writeln(lst,'setting channel 3,');
  721.              writeln(lst,'using 4 tab settings at 7,14,28, and 56 ',
  722.                      '(ESC 98 3 7 14 28 56 0)',esc,tt,char(3),char(7),char(14),
  723.                      char(28),char(56),nul);
  724.              writeln(lst);
  725.              writeln(lst,'CHOOSING CHANNEL 3 (ESC 47 3)',esc,char(47),char(3));
  726.              writeln(lst);
  727.              writeln(lst,'SETTING TOP OF FORM');
  728.              write(lst,char(12));
  729.              do_control_codes(11);
  730.              writeln(lst,'CHOOSING CHANNEL 0 (ESC 47 0)',esc,char(47),nul);
  731.              writeln(lst);
  732.           end;
  733.      101: begin
  734.              writeln(lst,'SET HORIZONTAL AND VERTICAL TAB INCREMENTS');
  735.              writeln(lst,'set horizontal tabs to 13 spaces (ESC 101 0 13)',
  736.                      esc,tt,nul,char(13));
  737.              writeln(lst);
  738.              do_control_codes(9);
  739.              writeln(lst,'set vertical tabs to 11 lines (ESC 101 1 11)',
  740.                      esc,tt,one,char(11));
  741.              do_control_codes(11);
  742.           end;
  743.      102: begin
  744.              writeln(lst,'PRINT SPACES OR LINE FEEDS W/O CARRIAGE RETURNS');
  745.              writeln(lst,'print 5 spaces',esc,tt,nul,char(5),'(ESC 102 0 5)');
  746.              writeln(lst,'print 13 line feeds',esc,tt,one,char(13),
  747.                      '(ESC 102 1 13)');
  748.              writeln(lst);
  749.           end;
  750.      103: begin
  751.              writeln(lst,'TURNING 15 CPI MODE ON (ESC 103)',esc,tt);
  752.              margin := MODE15;
  753.           end;
  754.      106: begin
  755.              if (this_print in [17..21]) then
  756.               begin
  757.                 writeln(lst,'CAUSE IMMEDIATE REVERSE LINE FEED OF n/180 INCH');
  758.                 writeln(lst,'use n=15 (half a line,',esc,tt,char(15),' ESC 106 15)');
  759.               end
  760.              else
  761.               begin
  762.                 writeln(lst,'CAUSE IMMEDIATE REVERSE LINE FEED OF n/216 INCH');
  763.                 writeln(lst,'use n=18 (half a line,',esc,tt,char(18),' ESC 106 18)');
  764.               end;
  765.              writeln(lst);
  766.              writeln(lst);
  767.           end;
  768.      108: begin
  769.              writeln(lst,'SET LEFT MARGIN TO n CHARACTERS');
  770.              writeln(lst,'use 10 characters (ESC 108 10)');
  771.              writeln(lst,esc,tt,char(10));
  772.              margin:=69;
  773.           end;
  774.      112: writeln(lst,'TURN PROPORTIONAL MODE ON (ESC 112 1)',
  775.                   esc,tt,one);
  776.      115: writeln(lst,'HALF-SPEED MODE ON (ESC 115 1)',
  777.                   esc,tt,one);
  778.      120: writeln(lst,'NEAR LETTER QUALITY MODE ON (ESC 120 1)',esc,tt,char(1));
  779.    end;   {case statement}
  780.  
  781.    if (e_code in [14,15,33,38,42,45,48,49,51,52,65,68,69,71,74,75,76,77,81,
  782.                   82,83,85,87,89,90,94,98,102,106,112,115,120]) then writeln(lst);
  783.    {filter inadvertent escape codes}
  784.  
  785. end;
  786.  
  787.  
  788. procedure combination1;
  789. begin
  790.    gotoxy(1,15);
  791.    clreol;
  792.    write('testing basic print mode combinations');
  793.  
  794.    margin:=PICA;
  795.    writeln(lst,' 0  Pica');
  796.    print_chars;
  797.  
  798.    if (77 in test_escape) then margin:=ELITE else margin:=PICA;
  799.    writeln(lst,' 1  Elite');
  800.    write(lst,chr(27),'M');
  801.    print_chars;
  802.    write(lst,chr(27),'P');
  803.  
  804.    margin:=COMPRESSED;
  805.    writeln(lst,' 2  Compressed');
  806.    write(lst,chr(15));
  807.    print_chars;
  808.    write(lst,chr(18));
  809.  
  810.    if (this_print in [15..23]) then margin:=COM_ELITE else margin:=ELITE;
  811.    writeln(lst,' 3  Compressed Elite');
  812.    write(lst,chr(27),'M',chr(15));
  813.    print_chars;
  814.    write(lst,chr(27),'P',chr(18));
  815.  
  816.    margin:=PICA;
  817.    writeln(lst,' 4  Emphasized Pica');
  818.    write(lst,chr(27),'E');
  819.    print_chars;
  820.    write(lst,chr(27),'F');
  821.  
  822.    if (77 in test_escape) then margin:=ELITE else margin:=PICA;
  823.    writeln(lst,' 5  Emphasized Elite');
  824.    write(lst,chr(27),'E',chr(27),'M');
  825.    print_chars;
  826.    write(lst,chr(27),'F',chr(27),'P');
  827.  
  828.    if (this_print in [15..21]) then margin:=COMPRESSED else margin:=PICA;
  829.    writeln(lst,' 6  Emphasized Compressed');
  830.    write(lst,chr(27),'E',chr(15));
  831.    print_chars;
  832.    write(lst,chr(27),'F',chr(18));
  833.  
  834.    if (this_print in [15..21]) then margin:=COM_ELITE
  835.    else if (77 in test_escape) then margin:=ELITE
  836.    else margin:=PICA;
  837.    writeln(lst,' 7  Emphasized Compressed Elite');
  838.    write(lst,chr(27),'E',chr(15),chr(27),'M');
  839.    print_chars;
  840.    write(lst,chr(27),'F',chr(18),chr(27),'P');
  841.  
  842.    margin:=EXPANDED;
  843.    writeln(lst,' 8  Expanded Pica');
  844.    write(lst,chr(27),'W',chr(1));
  845.    print_chars;
  846.    write(lst,chr(27),'W',chr(0));
  847.  
  848.    if (77 in test_escape) then margin:=EX_ELITE else margin:=EXPANDED;
  849.    writeln(lst,' 9  Expanded Elite');
  850.    write(lst,chr(27),'W',chr(1),chr(27),'M');
  851.    print_chars;
  852.    write(lst,chr(27),'W',chr(0),chr(27),'P');
  853.  
  854.    margin:=EX_COMPRESSED;
  855.    writeln(lst,'10 Expanded Compressed');
  856.    write(lst,chr(27),'W',chr(1),chr(15));
  857.    print_chars;
  858.    write(lst,chr(27),'W',chr(0),chr(18));
  859.  
  860.    if (this_print in [15..23]) then margin:=PICA 
  861.    else if (77 in test_escape) then margin:=EX_ELITE
  862.    else margin:=EXPANDED;
  863.    writeln(lst,'11 Expanded Compressed Elite');
  864.    write(lst,chr(27),'W',chr(1),chr(15),chr(27),'M');
  865.    print_chars;
  866.    write(lst,chr(27),'W',chr(0),chr(18),chr(27),'P');
  867.  
  868.    margin:=EXPANDED;
  869.    writeln(lst,'12 Emphasized Expanded Pica');
  870.    write(lst,chr(27),'E',chr(27),'W',chr(1));
  871.    print_chars;
  872.    write(lst,chr(27),'F',chr(27),'W',chr(0));
  873.  
  874.    if (77 in test_escape) then margin:=EX_ELITE else margin:=EXPANDED;
  875.    writeln(lst,'13 Exphasized Expanded Elite');
  876.    write(lst,chr(27),'E',chr(27),'W',chr(1),chr(27),'M');
  877.    print_chars;
  878.    write(lst,chr(27),'F',chr(27),'W',chr(0),chr(27),'P');
  879.  
  880.    if (this_print in [15..21]) then margin:=EX_COMPRESSED else margin:=EXPANDED;
  881.    writeln(lst,'14 Emphasized Expanded Compressed');
  882.    write(lst,chr(27),'E',chr(27),'W',chr(1),chr(15));
  883.    print_chars;
  884.    write(lst,chr(27),'F',chr(27),'W',chr(0),chr(18));
  885.  
  886.    if (this_print in [15..21]) then margin:=PICA
  887.    else if (77 in test_escape) then margin:=EX_ELITE
  888.    else margin:=EXPANDED;
  889.    writeln(lst,'15 Emphasized Expanded Compressed Elite');
  890.    write(lst,chr(27),'E',chr(27),'W',chr(1),chr(15),chr(27),'M');
  891.    print_chars;
  892.    write(lst,chr(27),'F',chr(27),'W',chr(0),chr(18),chr(27),'P');
  893.  
  894.    margin:=PICA;
  895.    writeln(lst,' 0  Pica');
  896.    print_chars;
  897.    
  898. end;
  899.  
  900. procedure combination2;
  901. begin
  902.    gotoxy(1,15);
  903.    clreol;
  904.    write('testing basic print mode combinations + 15 CPI pitch');
  905.  
  906.    margin:=MODE15;
  907.    writeln(lst,'16 15 CPI');
  908.    write(lst,chr(27),'g');
  909.    print_chars;
  910.    write(lst,chr(27),'!',chr(0));
  911.  
  912.    margin:=ELITE;
  913.    writeln(lst,'17 15 CPI + Elite');
  914.    write(lst,chr(27),'g',chr(27),'M');
  915.    print_chars;
  916.    write(lst,chr(27),'!',chr(0));
  917.  
  918.    margin:=MODE15;
  919.    writeln(lst,'18 Compressed 15 CPI');
  920.    write(lst,chr(27),'g',chr(15));
  921.    print_chars;
  922.    write(lst,chr(27),'!',chr(0));
  923.  
  924.    margin:=COM_ELITE;
  925.    writeln(lst,'19 Compressed Elite + 15 CPI');
  926.    write(lst,chr(27),'g',chr(27),'M',chr(15));
  927.    print_chars;
  928.    write(lst,chr(27),'!',chr(0));
  929.  
  930.    margin:=MODE15;
  931.    writeln(lst,'20 Emphasized 15 CPI');
  932.    write(lst,chr(27),'g',chr(27),'E');
  933.    print_chars;
  934.    write(lst,chr(27),'!',chr(0));
  935.  
  936.    margin:=ELITE;
  937.    writeln(lst,'21 Emphasized Elite + 15 CPI');
  938.    write(lst,chr(27),'g',chr(27),'E',chr(27),'M');
  939.    print_chars;
  940.    write(lst,chr(27),'!',chr(0));
  941.  
  942.    margin:=MODE15;
  943.    writeln(lst,'22 Emphasized Compressed 15 CPI');
  944.    write(lst,chr(27),'g',chr(27),'E',chr(15));
  945.    print_chars;
  946.    write(lst,chr(27),'!',chr(0));
  947.  
  948.    margin:=COM_ELITE;
  949.    writeln(lst,'23 Emphasized Compressed Elite + 15 CPI');
  950.    write(lst,chr(27),'g',chr(27),'E',chr(15),chr(27),'M');
  951.    print_chars;
  952.    write(lst,chr(27),'!',chr(0));
  953.  
  954.    margin:=EX_MODE15;
  955.    writeln(lst,'24 Expanded 15 CPI');
  956.    write(lst,chr(27),'g',chr(27),'W',chr(1));
  957.    print_chars;
  958.    write(lst,chr(27),'!',chr(0));
  959.  
  960.    margin:=EX_ELITE;
  961.    writeln(lst,'25 Expanded Elite + 15 CPI');
  962.    write(lst,chr(27),'g',chr(27),'W',chr(1),chr(27),'M');
  963.    print_chars;
  964.    write(lst,chr(27),'!',chr(0));
  965.  
  966.    margin:=EX_MODE15;
  967.    writeln(lst,'26 Expanded Compressed 15 CPI');
  968.    write(lst,chr(27),'g',chr(27),'W',chr(1),chr(15));
  969.    print_chars;
  970.    write(lst,chr(27),'!',chr(0));
  971.  
  972.    margin:=PICA;
  973.    writeln(lst,'27 Expanded Compressed Elite + 15 CPI');
  974.    write(lst,chr(27),'g',chr(27),'W',chr(1),chr(15),chr(27),'M');
  975.    print_chars;
  976.    write(lst,chr(27),'!',chr(0));
  977.  
  978.    margin:=EX_MODE15;
  979.    writeln(lst,'28 Emphasized Expanded 15 CPI');
  980.    write(lst,chr(27),'g',chr(27),'E',chr(27),'W',chr(1));
  981.    print_chars;
  982.    write(lst,chr(27),'!',chr(0));
  983.  
  984.    margin:=EX_ELITE;
  985.    writeln(lst,'29 Exphasized Expanded Elite + 15 CPI');
  986.    write(lst,chr(27),'g',chr(27),'E',chr(27),'W',chr(1),chr(27),'M');
  987.    print_chars;
  988.    write(lst,chr(27),'!',chr(0));
  989.  
  990.    margin:=EX_MODE15;
  991.    writeln(lst,'30 Emphasized Expanded Compressed 15 CPI');
  992.    write(lst,chr(27),'g',chr(27),'E',chr(27),'W',chr(1),chr(15));
  993.    print_chars;
  994.    write(lst,chr(27),'!',chr(0));
  995.  
  996.    margin:=PICA;
  997.    writeln(lst,'31 Emphasized Expanded Compressed Elite + 15 CPI');
  998.    write(lst,chr(27),'g',chr(27),'E',chr(27),'W',chr(1),chr(15),chr(27),'M');
  999.    print_chars;
  1000.    write(lst,chr(27),'!',chr(0));
  1001. end;
  1002.  
  1003.  
  1004. procedure check_combinations;
  1005. begin
  1006.   writeln(lst,'This portion of the program tests the combinations of print pitches');
  1007.   writeln(lst,'available for EPSON printers.');
  1008.   writeln(lst);
  1009.  
  1010.   writeln(lst,'Not all printers support all combinations of modes -- MPM-Print should,');
  1011.   writeln(lst,'however, match whatever pitch your printer uses for any given combination');
  1012.   writeln(lst,'of print modes and pitches.');
  1013.   writeln(lst);
  1014.   writeln(lst);
  1015.  
  1016.   combination1;
  1017.  
  1018.   if (this_print in [19..21]) then combination2;
  1019.         {15 cpi is only supported by certain LQ series printers}
  1020.  
  1021.   write(lst,chr(12),chr(27),chr(64));   {form feed and printer reset}
  1022.   if (120 in test_escape) then write(lst,esc,char(120),char(0));
  1023.        {reset NLQ mode printers to draft mode}
  1024. end;
  1025.  
  1026. procedure do_control_checks;
  1027. begin
  1028.  
  1029.    for i:=7 to 31 do if (i in test_control) then
  1030.       do_control_codes(i);
  1031.  
  1032.    for i:=14 to 115 do if (i in test_escape) then
  1033.    begin
  1034.       do_escape_codes(i);
  1035.       if (i in [14,15,33,36,38,45,48,49,51,52,60,65,69,71,77,81,82,85,87,92,103,108,112,115,120])
  1036.          then print_chars;
  1037.  
  1038.       if (i in [33,48,49,51,65,69,77,87]) then print_design;
  1039.  
  1040.       clear_escape_codes(i);
  1041.    end;
  1042.  
  1043.    writeln(lst);
  1044.    writeln(lst);
  1045.    writeln(lst);
  1046.    write(lst,'PERFORMING FORM FEED AND MASTER RESET (CHR$(12) ESC 64)',
  1047.          char(12),esc,char(64));
  1048. end;
  1049.  
  1050. begin                    {main program}
  1051.    lowvideo;
  1052.    clrscr;
  1053.  
  1054.    if (MPM_print_installed) then
  1055.    begin
  1056.       write('The copy of MPM-Print that is memory-resident has been set up for a');
  1057.       if (this_print in [13,14]) then writeln(':') else writeln('n:');
  1058.       gotoxy(25,3);
  1059.       write(printers[this_print].pname);
  1060.       gotoxy(1,5);
  1061.       write('Is this the printer you',char(39),'re using? (Y for YES, anything else for NO) ');
  1062.       read(kbd,ii);
  1063.       margin:=PICA;                                   {set the line width}
  1064.  
  1065.       if not (ii in ['Y','y']) then
  1066.        begin
  1067.          writeln('NO');
  1068.          writeln;
  1069.          writeln;
  1070.          writeln('To set MPM-Print for a different printer, run the program using its');
  1071.          writeln('setup option:');
  1072.          writeln;
  1073.          writeln('                  MPMPRINT SETUP    or');
  1074.          writeln('                  MPMPRINT S        or');
  1075.          writeln('                  MPMPRINT /S');
  1076.          writeln;
  1077.          writeln('You can then choose the correct printer for MPM-Print to use.');
  1078.        end
  1079.       else
  1080.        begin
  1081.          writeln('YES');
  1082.          delay(200);
  1083.          clrscr;
  1084.          writeln('Which tests would you like to run?');
  1085.          writeln;
  1086.          writeln('   1. Print pitch combination test (tests all combinations of print');
  1087.          writeln('         sizes, such as Expanded Pica and Expanded Compressed)');
  1088.          writeln('   2. Full printer contol tests (tests virtually every control that can');
  1089.          writeln('         be sent to your printer)');
  1090.          writeln('   3. Both tests');
  1091.          writeln;
  1092.          writeln('      Test 1 (print pitch combinations) will take about 4 minutes to print;');
  1093.          writeln('      Test 2 (control tests) will take about 10 minutes to print.');
  1094.          writeln;
  1095.          writeln('(Enter the number of the test(s) to run,');
  1096.          write(' anything else to quit) .............................. ');
  1097.          read(kbd,jj);
  1098.          write(jj);
  1099.  
  1100.          if (jj in ['1'..'3']) then
  1101.          begin
  1102.  
  1103.             test_escape:=etest[printers[this_print].point];
  1104.             test_control:=stest[printers[this_print].point];
  1105.  
  1106.             if (120 in test_escape) then write(lst,esc,char(120),char(0));
  1107.                   {reset NLQ mode printers to draft mode}
  1108.  
  1109.             if (jj in ['1','3']) then check_combinations;
  1110.  
  1111.             if (jj in ['2','3']) then do_control_checks;
  1112.          end;
  1113.       end;
  1114.     end
  1115.    else
  1116.     begin
  1117.        writeln('MPM-Print is not memory resident; without MPM-Print installed in memory,');
  1118.        writeln('your printer cannot work properly with this program.');
  1119.        writeln;
  1120.        writeln;
  1121.        writeln('Before you try this program again, please run MPM-Print first.');
  1122.        writeln('MPM-Print will become memory resident, and will allow this program to work');
  1123.        writeln('correctly.');
  1124.     end;
  1125. end.
  1126.